package com.qf.service.impl;

import com.qf.service.IndexService;
import com.qf.util.ElasticsearchUtil;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;

public class IndexServiceImpl implements IndexService {

    private RestHighLevelClient client = ElasticsearchUtil.client();


    @Override
    public void createIndex(String index, String type, Settings settings, XContentBuilder mappings) throws IOException {
        //0. 判断索引存在
        if(!this.existsIndex(index)) {
            //1. 创建Request对象（根据业务不同，创建不同的Request）
            CreateIndexRequest request = new CreateIndexRequest();

            //2. 封装Request信息
            request.index(index);               // 指定索引
            request.settings(settings);         // 指定分片和备份
            request.mapping(type, mappings);   // 指定类型和数据结构

            //3. 通过client发送request到es服务
            CreateIndexResponse resp = client.indices().create(request, RequestOptions.DEFAULT);

            //4. 根据返回结果输出内容
            System.out.println("【索引操作】 创建索引成功，索引名称 = " + resp.index());
        }
        System.out.println("【索引操作】 创建索引失败，索引已经存在: " + index);
    }

    @Override
    public boolean existsIndex(String index) throws IOException {
        //1. 创建Request对象（根据业务不同，创建不同的Request）
        GetIndexRequest request = new GetIndexRequest();

        //2. 封装Request信息
        request.indices(index);

        //3. 通过client发送request到es服务
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);

        //4. 根据返回结果输出内容
        System.out.println("【索引操作】 判断index = " + index + "是否存在,返回结果为:" + exists);

        return exists;
    }


    @Override
    public void deleteIndex(String index) throws IOException {
        //0. 判断索引存在
        if(this.existsIndex(index)) {
            //1. 创建Request对象（根据业务不同，创建不同的Request）
            DeleteIndexRequest request = new DeleteIndexRequest();

            //2. 封装Request信息
            request.indices(index);

            //3. 通过client发送request到es服务
            AcknowledgedResponse resp = client.indices().delete(request, RequestOptions.DEFAULT);

            //4. 根据返回结果输出内容
            System.out.println("【索引操作】 删除索引: " + index + ",最终结果为:" + resp.isAcknowledged());
        }
        System.out.println("【索引操作】 删除索引失败，索引不存在: " + index);
    }


}
